package threshold;

/**
 * @Author wujiaming
 * @Description TODO
 * @Date 2023-03-06 17:17
 * @Version 1.0
 */
public class IsSameTree {


    /**
     * 同时先序遍历两颗二叉树，如果结点不同则不是相同的树
     * @param p
     * @param q
     * @return
     */
    public boolean isSameTree(TreeNode p, TreeNode q) {

        if(p==null &&q==null){
            return true;
         //等价的化简写法if(p==null || q==null)只要其中有一个是空则返回false
        }else if( (p==null&&q!=null) || (q==null&&p!=null)){
            return false;
        } else if(p.val!=q.val){
            return false;

        }else {
            //递归栈中返回的false会返回到下面的isSameTree函数中，只要有一个返回false就是返回false。将两条递归写成一条递归
            return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
        }


    }

    public static void main(String[] args) {

        IsSameTree test = new IsSameTree();
        TreeNode p = new TreeNode(1);
        TreeNode node1 = new TreeNode(2);
        p.left=node1;p.right=null;

        TreeNode q = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        q.left=null;q.right=node2;

        boolean sameTree = test.isSameTree(p, q);
        System.out.println(sameTree);

    }
}
